package heart;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import utils.SenderUtil;


@ChannelHandler.Sharable
public class HeartClientHeartBeat extends SimpleChannelInboundHandler<ByteBuf> {
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        if (evt instanceof IdleStateEvent) {
            IdleStateEvent idleEvent = (IdleStateEvent) evt;
            if (idleEvent.state() == IdleState.READER_IDLE) {
            } else if (idleEvent.state() == IdleState.WRITER_IDLE) {
                System.out.println("hello");
                ctx.channel().writeAndFlush("hello");
            } else if (idleEvent.state() == IdleState.ALL_IDLE) {
            }
        }
        super.userEventTriggered(ctx, evt);
    }

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println(11111);
//        byte[] a = new byte[]{0x23,(byte)0x23,(byte)0x02,(byte)0xFE,(byte)0x4C,(byte)0x42,(byte)0x39,(byte)0x4B,(byte)0x42,(byte)0x38,(byte)0x4B,(byte)0x47,(byte)0x34,(byte)0x47,(byte)0x45,(byte)0x4E,(byte)0x4A,(byte)0x4C,(byte)0x32,(byte)0x37,(byte)0x32,(byte)0x01,(byte)0x01,(byte)0xED,(byte)0x11,(byte)0x0A,(byte)0x13,(byte)0x14,(byte)0x1C,(byte)0x29,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0x01,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x03,(byte)0x23,(byte)0x48,(byte)0x17,(byte)0x60,(byte)0x27,(byte)0x1B,(byte)0x4C,(byte)0x01,(byte)0x00,(byte)0x4B,(byte)0xAB,(byte)0x00,(byte)0x00,(byte)0x02,(byte)0x01,(byte)0x01,(byte)0x04,(byte)0x5B,(byte)0x4E,(byte)0x20,(byte)0x4E,(byte)0x20,(byte)0x50,(byte)0x17,(byte)0xB6,(byte)0x26,(byte)0xFC,(byte)0x05,(byte)0x00,(byte)0x07,(byte)0x33,(byte)0x43,(byte)0x75,(byte)0x01,(byte)0xE9,(byte)0x40,(byte)0x94,(byte)0x06,(byte)0x01,(byte)0x01,(byte)0x0C,(byte)0xFF,(byte)0x01,(byte)0x03,(byte)0x0C,(byte)0xFA,(byte)0x01,(byte)0x02,(byte)0x43,(byte)0x05,(byte)0x0A,(byte)0x40,(byte)0x07,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x03,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x08,(byte)0x01,(byte)0x01,(byte)0x17,(byte)0x60,(byte)0x27,(byte)0x1B,(byte)0x00,(byte)0xB4,(byte)0x00,(byte)0x01,(byte)0xB4,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFB,(byte)0x0C,(byte)0xFB,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFB,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFB,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFB,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFA,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFE,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFC,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFD,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFF,(byte)0x0C,(byte)0xFD,(byte)0x09,(byte)0x01,(byte)0x01,(byte)0x00,(byte)0x28,(byte)0x41,(byte)0x43,(byte)0x43,(byte)0x43,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x40,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x40,(byte)0x40,(byte)0x41,(byte)0x41,(byte)0x40,(byte)0x40,(byte)0x40,(byte)0x41,(byte)0x41,(byte)0x40,(byte)0x40,(byte)0x40,(byte)0x40,(byte)0x40,(byte)0x40,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x41,(byte)0x43,(byte)0x43,(byte)0x43,(byte)0x43,(byte)0xD5};
//        byte[] aa = new byte[]{35, 35, 6, -2, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 1, 0, 41, 17, 12, 19, 8, 58, 48, 0, 1, 1, -19};
//        byte[] hexArray = SenderUtil.byteArrayToHexArray(aa);
//        ByteBuf buf = null;
//        buf = Unpooled.buffer(hexArray.length);
//        buf.writeBytes(hexArray);
//        System.out.println("+++++"+buf);
//        System.out.println("Client sent: " + ByteBufUtil.hexDump(buf));
//        ctx.writeAndFlush(buf);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf buf = (ByteBuf)msg;
        byte[] receiveByte = null;
        receiveByte = new byte[buf.readableBytes()];
        System.out.println("channelRead "+new String(receiveByte, "UTF-8"));
    }

    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf buf) throws Exception {
        byte[] receiveByte = null;
        receiveByte = new byte[buf.readableBytes()];
        System.out.println(new String(receiveByte, "UTF-8"));
    }
}
